#include "Sequence_Stack.h"

//typedef struct {
//
//    SElemType *base;    //在栈构造之前和销毁之后，base的值为NULL
//    SElemType *top;     //栈顶指针
//    int StackSize;      //当前已分配的存储空间，以元素为单位
//}SqStack;
//
//Status InitStack(SqStack *S);   //构造一个空栈
//Status DestroyStack(SqStack *S);    //销毁栈S，S不再存在
//Status ClearStack(SqStack *S);  //把S置为空栈
//Status StackEmpty(SqStack S);   //若S为空栈返回TRUE，否则返回FALSE
//int StackLength(SqStack S);     //返回S的元素个数，即栈的长度
//SElemType* GetTop(SqStack S);  //若栈不空，则返回栈顶元素，否则返回NULL
//Status Push(SqStack *S,SElemType e);    //插入元素e为新的栈顶元素
//SElemType* Pop(SqStack *S);  //若栈不空，则删除栈顶元素并返回，否则返回NULL
//Status StackTraverse(SqStack S,Status (*visit)(SElemType));     //从栈底到栈顶一次对栈中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

Status visit(SElemType e);

int main() {

    SqStack S;
    InitStack(&S);

    for (int i = 0; i < 5; ++i) {
        SElemType e=i+1;
        Push(&S,e);
    }

    printf("Traverse:\t");
    StackTraverse(S,visit);
    printf("\n");

//    DestroyStack(&S);


//    ClearStack(&S);


//    if(StackEmpty(S))
//        printf("\nStack is Empty!\n");
//    else
//        printf("\nStack isn't Empty!\n");


//    printf("\nStackSize:%d\tStackLength:%d\n",S.StackSize, StackLength(S));


//    printf("\nTopElem:%d\n", *GetTop(S));


//    printf("\nPopElem:%d\n", *Pop(&S));



    printf("Traverse:\t");
    StackTraverse(S,visit);
    printf("\n");

    return 0;
}

Status visit(SElemType e){

    printf("%d\t",e);
    return OK;
}